package com.example.authsystem.repository;

import com.example.authsystem.model.LoginStats;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * 登录统计数据访问层接口
 * 继承JpaRepository，提供登录统计实体的CRUD操作和自定义查询方法
 * 用于记录和查询用户登录信息，支持统计分析功能
 */
@Repository
public interface LoginStatsRepository extends JpaRepository<LoginStats, Long> {

    /**
     * 根据用户ID查找该用户的所有登录记录
     * 用于查看特定用户的登录历史
     * 
     * @param userId 用户ID
     * @return 指定用户的登录记录列表
     */
    List<LoginStats> findByUserId(Long userId);

    /**
     * 查询指定时间范围内的所有登录记录
     * 用于统计特定时间段内的登录情况
     * 
     * @param start 开始时间
     * @param end 结束时间
     * @return 指定时间范围内的登录记录列表
     */
    List<LoginStats> findByLoginTimeBetween(Date start, Date end);

    /**
     * 统计指定日期之后的独立登录用户数
     * 使用自定义JPQL查询，计算不同用户名的数量
     * 主要用于获取今日登录人数统计
     * 
     * @param date 指定的起始日期
     * @return 从指定日期开始的独立登录用户数量
     */
    @Query("SELECT COUNT(DISTINCT ls.username) FROM LoginStats ls WHERE ls.loginTime >= :date")
    Long countDistinctUsersByDate(Date date);
}